package me.xhy.java.springboot3.webflux.projectreactor.s3projectreactor;

import reactor.core.publisher.Flux;

import java.util.Arrays;
import java.util.List;

/**
 * @author xhy
 * @since 2024-11-07 上午8:30
 */
public class S6Operator {
  public static void main(String[] args) {

    // 1. flatMap 扁平化
    System.out.println("=== 1. flatMap ===");
    Flux.just("abc", "def", "ghi")
        .flatMap(item -> {
          String[] chars = item.split("");
          return Flux.fromArray(chars); // 每个字符以流的形式返回。一个元素 转换成 多个元素
        }).log().subscribe();

    // 2. concat
    System.out.println("=== 2. concat ===");
    Flux.concat(Flux.just(1, 2), Flux.just(3, 4))
        .log().subscribe();

    // concatWith
    System.out.println("=== 2. concatWith ===");
    Flux.just(1, 2).concatWith(Flux.just(3, 4)).log().subscribe();

    // 3. concatMap， 与flatMap 差不多，更多的用于将可遍历的结合转化成流在 concatMap 中返回
    System.out.println("=== 3. concatMap ===");
    Flux.just("abc", "def", "ghi")
        .concatMap(item -> {
          List<String> list = Arrays.asList(item.split(""));
          return Flux.fromIterable(list);
        }).log().subscribe();

    // 4.

  }
}
